package com.pac.questionnaire.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.common.tools.StringTools;
import com.common.tools.TimeTools;
import com.common.util.ErrorNumber;
import com.common.util.LogicException;
import com.pac.questionnaire.QuestionnaireKeyContent;
import com.pac.questionnaire.bean.QuestionBean;
import com.pac.questionnaire.bean.QuestionnaireBean;
import com.pac.questionnaire.bean.QuestionnaireQuestionRelBean;
import com.pac.questionnaire.dao.QuestionnaireDao;
import com.pac.questionnaire.service.QuestionService;
import com.pac.questionnaire.service.QuestionnaireQuestionRelService;
import com.pac.questionnaire.service.QuestionnaireService;

/**
 * 问卷Service实现
 * 
 * @author lujun.chen
 * @version [版本号, 2015年2月13日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Service(value = "questionnaireService")
public class QuestionnaireServiceImpl implements QuestionnaireService {

	private static Logger logger = Logger
			.getLogger(QuestionnaireServiceImpl.class);

	@Autowired
	private QuestionnaireDao questionnaireDao;

	@Autowired
	private QuestionService questionService;

	@Autowired
	private QuestionnaireQuestionRelService questionnaireQuestionRelService;

	@Override
	public List<QuestionnaireBean> queryQuestionnaire(
			QuestionnaireBean questionnaireBean) {

		return questionnaireDao.queryQuestionnaire(questionnaireBean);
	}

	@Override
	public QuestionnaireBean findQuestionnaire(
			QuestionnaireBean questionnaireBean) {
		List<QuestionnaireBean> questionnaireList = questionnaireDao
				.queryQuestionnaire(questionnaireBean);
		if (null != questionnaireList && questionnaireList.size() > 0) {
			QuestionnaireBean questionnaireBeanR = questionnaireList.get(0);
			// 获取问题
			List<QuestionBean> questionList = questionService
					.queryQuestionByQuestionnaireId(questionnaireBeanR.getId());
			questionnaireBeanR.setQuestions(questionList);
			return questionnaireBeanR;
		}
		return null;
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED)
	public String addQuestionnaire(QuestionnaireBean questionnaireBean) {
		if (null == questionnaireBean) {
			logger.error("添加问卷出错，参数为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "参数为空");
		}

		if (StringTools.isNull(questionnaireBean.getTitle())) {
			logger.error("添加问卷出错，问卷标题为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "问卷标题为空");
		}

		if (StringTools.isNull(questionnaireBean.getUserId())) {
			logger.error("添加问卷出错，用户ID为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "用户ID为空");
		}

		if (StringTools.isNull(questionnaireBean.getState())) {
			questionnaireBean
					.setState(QuestionnaireKeyContent.QUESTIONNAIRE_STATE_EDIT);
		}

		if (StringTools.isNull(questionnaireBean.getCreateDate())) {
			questionnaireBean.setCreateDate(TimeTools.now());
		}

		if (StringTools.isNull(questionnaireBean.getAutoAnswer())) {
			questionnaireBean
					.setAutoAnswer(QuestionnaireKeyContent.QUESTION_AUTO_ANSWER_NO);
		}
		
		if(StringUtils.isEmpty(questionnaireBean.getSendCycleVal()))
		{
			questionnaireBean.setSendCycleVal("0");
		}

		// 添加问卷
		String questionnaireId = questionnaireDao
				.addQuestionnaire(questionnaireBean);

		return questionnaireId;
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED)
	public boolean updateQuestionnaire(QuestionnaireBean questionnaireBean) {
		if (null == questionnaireBean) {
			logger.error("修改问卷出错，参数为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "参数为空");
		}

		if (StringTools.isNull(questionnaireBean.getId())) {
			logger.error("修改问卷出错，问卷ID为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "问卷ID为空");
		}
		return questionnaireDao.updateQuestionnaire(questionnaireBean);
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRED)
	public boolean delQuestionnaire(QuestionnaireBean questionnaireBean) {
		if (null == questionnaireBean) {
			logger.error("删除问卷出错，参数为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "参数为空");
		}

		if (StringTools.isNull(questionnaireBean.getId())) {
			logger.error("删除问卷出错，问卷ID为空");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL, "问卷ID为空");
		}

		// 检查问卷状态，编辑状态的问卷才能被删除
		QuestionnaireBean questionnaireBeanR = this
				.findQuestionnaire(questionnaireBean);
		if (null == questionnaireBeanR) {
			logger.error("删除问卷出错，问卷【" + questionnaireBean.getId() + "】不存在");
			throw new LogicException(ErrorNumber.LOGIC_EXCEPTION, "问卷不存在");
		}

		// 编辑状态的问卷才能被删除
		if (!QuestionnaireKeyContent.QUESTIONNAIRE_STATE_EDIT
				.equals(questionnaireBeanR.getState())) {
			logger.error("删除问卷出错，问卷【" + questionnaireBeanR.getId() + "】处于【"
					+ questionnaireBeanR.getState() + "】状态，不能删除");
			throw new LogicException(ErrorNumber.PARAM_IS_NULL,
					"问卷不处于编辑状态，不能删除");
		}

		// 删除问卷问题关联关系
		QuestionnaireQuestionRelBean questionnaireQuestionRelBean = new QuestionnaireQuestionRelBean();
		questionnaireQuestionRelBean.setQuestionnaireId(questionnaireBean
				.getId());
		questionnaireQuestionRelService
				.delQuestionnaireQuestionRel(questionnaireQuestionRelBean);

		return questionnaireDao.delQuestionnaire(questionnaireBean);
	}

}
